package com.ruoyi.system.service.impl;

import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.msg.CharUtil;
import com.ruoyi.common.msg.NotifyService;
import com.ruoyi.common.msg.NotifyType;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.ByCodeMsgMapper;
import com.ruoyi.system.domain.ByCodeMsg;
import com.ruoyi.system.service.IByCodeMsgService;

/**
 * 短信随机验证码Service业务层处理
 *
 * @author ruoyi
 * @date 2023-05-16
 */
@Service
public class ByCodeMsgServiceImpl implements IByCodeMsgService
{
    @Autowired
    private ByCodeMsgMapper byCodeMsgMapper;

    @Autowired
    private NotifyService notifyService;

    @Override
    public JSONObject sendCode(String mobile) {
        JSONObject result = new JSONObject();
        //根据手机号码获取用户的发送短信的时间间隔，如果小于1分钟，不予以再次发送
        String time = byCodeMsgMapper.getNowSendTime(mobile);
        if(!StringUtils.isEmpty(time)){
            int times = Integer.parseInt(time);
            if(times <= 60){
                result.put("code","400");
                result.put("msg","您的申请过于频繁，请稍后再试！");
                return result;
            }
        }
        // 生成随机码
        String code = CharUtil.getRandomNum(6);

        //进行保存
        ByCodeMsg byCodeMsg = new ByCodeMsg();
        byCodeMsg.setMobile(mobile);
        byCodeMsg.setCode(code);
        byCodeMsg.setAddtime(DateUtils.getTime());
        byCodeMsgMapper.insertByCodeMsg(byCodeMsg);


        //进行短信的发送
        String[] params = new String[]{code};
        notifyService.notifySmsTemplate(mobile, NotifyType.CAPTCHA, params);

        result.put("code","200");
        return result;
    }

    /**
     * 查询短信随机验证码
     *
     * @param id 短信随机验证码主键
     * @return 短信随机验证码
     */
    @Override
    public ByCodeMsg selectByCodeMsgById(Long id)
    {
        return byCodeMsgMapper.selectByCodeMsgById(id);
    }

    /**
     * 查询短信随机验证码列表
     *
     * @param byCodeMsg 短信随机验证码
     * @return 短信随机验证码
     */
    @Override
    public List<ByCodeMsg> selectByCodeMsgList(ByCodeMsg byCodeMsg)
    {
        return byCodeMsgMapper.selectByCodeMsgList(byCodeMsg);
    }

    /**
     * 新增短信随机验证码
     *
     * @param byCodeMsg 短信随机验证码
     * @return 结果
     */
    @Override
    public int insertByCodeMsg(ByCodeMsg byCodeMsg)
    {
        return byCodeMsgMapper.insertByCodeMsg(byCodeMsg);
    }

    /**
     * 修改短信随机验证码
     *
     * @param byCodeMsg 短信随机验证码
     * @return 结果
     */
    @Override
    public int updateByCodeMsg(ByCodeMsg byCodeMsg)
    {
        return byCodeMsgMapper.updateByCodeMsg(byCodeMsg);
    }

    /**
     * 批量删除短信随机验证码
     *
     * @param ids 需要删除的短信随机验证码主键
     * @return 结果
     */
    @Override
    public int deleteByCodeMsgByIds(Long[] ids)
    {
        return byCodeMsgMapper.deleteByCodeMsgByIds(ids);
    }

    /**
     * 删除短信随机验证码信息
     *
     * @param id 短信随机验证码主键
     * @return 结果
     */
    @Override
    public int deleteByCodeMsgById(Long id)
    {
        return byCodeMsgMapper.deleteByCodeMsgById(id);
    }
}
